<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>闭包的注意事项</title>
    <script>
        /* 
            闭包的生命周期
                1.闭包在外部函数调用时产生，外部函数调用时，每次都会产生一个全新的闭包。
                2.在内部函数丢失时销毁（内部函数被垃圾回收了才会消失）

            闭包的注意事项
                1.闭包主要同来隐藏一些不希望外部访问的内容，这就意味着闭包需要占用一定的内存空间。
                2.相较于类来说，闭包比较浪费空间，类能通过原型链共享方法，避免了重复创建。
                    需要执行次数较少时，使用闭包。需要大量创建实例时，使用类。

        */


        'user strict' 
        fn=()=>{
            let someVarible ='someValue'    //这里创建自己想要隐藏的东西
            fn1=()=>{
                console.log(someVarible)    //内部函数必须要访问外部的变量
            }

            return fn1
        }

        fn1=fn()
        fn1()


        fn2=()=>{
            let someVarible ='内层是匿名函数someValue'    //这里创建自己想要隐藏的东西
            return ()=>{
                console.log(someVarible)    //内部函数必须要访问外部的变量，这里直接可以做为匿名函数返回。
            }
        }
         const result=fn2()
         result()

        
    </script>
</head>
<body>
    
</body>
</html>